import wx
import os
from io import StringIO
from io import open
from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter, process_pdf
from pdfminer.layout import LAParams
from pdfminer.converter import PDFPageAggregator
from pdfminer.converter import TextConverter
from docx import Document
document = Document()


app = wx.App()
window = wx.Frame(None,title='test',size=(600,700))
panel = wx.Panel(window)

font = wx.Font(16, wx.DEFAULT, wx.NORMAL, wx.NORMAL, False)
font1 = wx.Font(12, wx.DEFAULT, wx.NORMAL, wx.NORMAL, False)


class FileDropTarget(wx.FileDropTarget):
    def __init__(self, window):
        wx.FileDropTarget.__init__(self)
        self.window = window

    def OnDropFiles(self, x, y, filePath):
        #self.window.SetValue(fileNames)
        path = filePath[0]
        self.window.SetValue(path)
        #print(path)
        openFile1(path)


def openFile(event):
    file_dlg = wx.FileDialog(None,message=u"选择文件",defaultDir=os.getcwd(),defaultFile="",style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)
    if file_dlg.ShowModal() == wx.ID_OK:
        print(file_dlg.GetPath())
    filename.SetValue(file_dlg.GetPath())
    print(filename.GetValue())
    openFile1(file_dlg.GetPath())

def openFile1(filename_get):

    pdfFile = open(filename_get, "rb")
    rsrcmgr = PDFResourceManager()
    retstr = StringIO()
    laparams = LAParams()
    device = TextConverter(rsrcmgr, retstr, laparams=laparams)

    process_pdf(rsrcmgr, device, pdfFile)
    device.close()

    content_pdf = retstr.getvalue()
    retstr.close()
    #print(content_pdf)
    content.SetValue(content_pdf)

def outFile(event):
    file_out = filename1.GetValue()
    file_in = filename.GetValue()
    print(file_out)
    print(file_in)

    fn = open(file_in, 'rb')
    parser = PDFParser(fn)
    doc = PDFDocument()
    parser.set_document(doc)
    doc.set_parser(parser)
    resource = PDFResourceManager()
    laparams = LAParams()
    device = PDFPageAggregator(resource, laparams=laparams)
    interpreter = PDFPageInterpreter(resource, device)
    for i in doc.get_pages():
        interpreter.process_page(i)
        layout = device.get_result()
        for out in layout:
            if hasattr(out, "get_text"):
                content = out.get_text().replace(u'\xa0', u' ')
                document.add_paragraph(
                    content, style='ListBullet'
                )
            document.save(file_out)
            #document.save('a' + '.docx')
    print('处理完成')


##使用相对坐标
openButton = wx.Button(panel,label='open file')
openButton.SetFont(font)
openButton.Bind(wx.EVT_BUTTON,openFile)

filename = wx.TextCtrl(panel,value='input file',style = wx.TE_READONLY)
filename.SetFont(font1)

content = wx.TextCtrl(panel,value = '大伟哥最帅',style=wx.TE_MULTILINE | wx.HSCROLL)
content.SetFont(font1)
content.SetFont(font1)

filename1 = wx.TextCtrl(panel,value='output file')
filename1.SetFont(font1)

outputButton = wx.Button(panel,label='trans file')
outputButton.SetFont(font)
outputButton.Bind(wx.EVT_BUTTON,outFile)

hbox = wx.BoxSizer()
hbox.Add(filename,proportion=1, flag=wx.EXPAND)
hbox.Add(openButton,proportion=0,flag=wx.LEFT, border=5)

hbox1 = wx.BoxSizer()
hbox1.Add(filename1,proportion=1, flag=wx.EXPAND)
hbox1.Add(outputButton,proportion=0,flag=wx.LEFT, border=5)

vbox = wx.BoxSizer(wx.VERTICAL)
vbox.Add(hbox,proportion=0, flag=wx.EXPAND | wx.ALL, border=5)
vbox.Add(content, proportion=1, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
vbox.Add(hbox1,proportion=0, flag=wx.EXPAND | wx.ALL, border=5)

panel.SetSizer(vbox)

dropTarget = FileDropTarget(filename)
panel.SetDropTarget(dropTarget)

window.Show()
app.MainLoop()

